Phần 1: Giới Thiệu Đề tài phân tích và dự đoán giá điện thoại Nguồn Dữ Liệu: link: https://www.kaggle.com/datasets/iabhishekofficial/mobile-price-classification?datasetId=11167 tập dữ liệu: train.csv, test.csv Giới thiệu sơ lược về dữ liệu

Bộ dữ liệu gồm 21 cột và 2000 dòng : +Id +battery_power: Tổng năng lượng pin có thể lưu trữ +blue: Có bluetooth hay không +clock_speed:tốc độ mà bộ vi xử lý thực hiện các lệnh +dual_sim: có hỗ trợ hai sim hay không +fc: Độ phân giải camera trước +four_g: có 4g hay không +int_memory: dung lượng bộ nhớ trong +m_dep: độ dày điện thoại +mobile_wt: độ nặng điện thoại +n_cores:Số lõi của bộ xử lý +pc: Độ phân giải camera sau +px_height: chiều cao của độ phân giải màn hình +px_width: chiều rộng của độ phân giải màn hình +ram: Dung lượng của Ram +sc_h: chiều cao màn hình +sc_w: chiều rộng màn hình +talk_time: thời gian dài nhất khi sạc điện thoại +three_g: có 3g hay không +touch_screen: có màn hình cảm ứng hay không +wifi: có wifi hay không +price_range: khoảng giá trị chi phí điện thoại (0,1,2,3)

Kế Hoạch Phân Tích Dữ Liệu + Biến dự đoán: price_range + Biến sử dụng để dự đoán: các biến còn lại

Phần 2: Dữ Liệu

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.6     v dplyr   1.0.8
## v tidyr   1.2.0     v stringr 1.4.0
## v readr   2.1.2     v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning: package 'tibble' was built under R version 4.1.3
## Warning: package 'tidyr' was built under R version 4.1.3
## Warning: package 'readr' was built under R version 4.1.3
## Warning: package 'purrr' was built under R version 4.1.3
## Warning: package 'dplyr' was built under R version 4.1.3
## Warning: package 'forcats' was built under R version 4.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggplot2)
library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.1.3
library(rattle)
## Warning: package 'rattle' was built under R version 4.1.3
## Loading required package: bitops
## Rattle: A free graphical interface for data science with R.
## Version 5.5.1 Copyright (c) 2006-2021 Togaware Pty Ltd.
## Type 'rattle()' to shake, rattle, and roll your data.
library(tree)
library('class')
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.1.3
## corrplot 0.92 loaded
library(RColorBrewer)
library(e1071)
## Warning: package 'e1071' was built under R version 4.1.3
library(plotly)
## Warning: package 'plotly' was built under R version 4.1.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(rsample)
## Warning: package 'rsample' was built under R version 4.1.3
## 
## Attaching package: 'rsample'
## The following object is masked from 'package:e1071':
## 
##     permutations
df <- read.csv('C:/Users/quocd/OneDrive/Desktop/hellofile/datamining/train.csv')
df.split <- rsample::initial_split(
    df,
    prop=0.75, # 75% training, 25% testing 
    strata=price_range)

df.train <- rsample::training(df.split)
df.test <- rsample::testing(df.split)
head(df.train)
##    battery_power blue clock_speed dual_sim fc four_g int_memory m_dep mobile_wt
## 8           1954    0         0.5        1  0      0         24   0.8       187
## 10           509    1         0.6        1  2      1          9   0.1        93
## 15          1866    0         0.5        0 13      1         52   0.7       185
## 16           775    0         1.0        0  3      0         46   0.7       159
## 24          1602    1         2.8        1  4      1         38   0.7       114
## 30           851    0         0.5        0  3      0         21   0.4       200
##    n_cores pc px_height px_width  ram sc_h sc_w talk_time three_g touch_screen
## 8        4  0       512     1149  700   16    3         5       1            1
## 10       5 15      1137     1224  513   19   10        12       1            0
## 15       1 17       356      563  373   14    9         3       1            0
## 16       2 16       862     1864  568   17   15        11       1            1
## 24       3 20       466      788 1037    8    7        20       1            0
## 30       5  7      1171     1263  478   12    7        10       1            0
##    wifi price_range
## 8     1           0
## 10    0           0
## 15    1           0
## 16    1           0
## 24    0           0
## 30    1           0
dim(df.train)
## [1] 1500   21
summary(df.train)
##  battery_power       blue         clock_speed       dual_sim    
##  Min.   : 501   Min.   :0.0000   Min.   :0.500   Min.   :0.000  
##  1st Qu.: 852   1st Qu.:0.0000   1st Qu.:0.700   1st Qu.:0.000  
##  Median :1235   Median :0.0000   Median :1.500   Median :1.000  
##  Mean   :1240   Mean   :0.4933   Mean   :1.528   Mean   :0.504  
##  3rd Qu.:1608   3rd Qu.:1.0000   3rd Qu.:2.300   3rd Qu.:1.000  
##  Max.   :1998   Max.   :1.0000   Max.   :3.000   Max.   :1.000  
##        fc             four_g        int_memory        m_dep       
##  Min.   : 0.000   Min.   :0.000   Min.   : 2.00   Min.   :0.1000  
##  1st Qu.: 1.000   1st Qu.:0.000   1st Qu.:16.00   1st Qu.:0.2000  
##  Median : 3.000   Median :1.000   Median :32.00   Median :0.5000  
##  Mean   : 4.251   Mean   :0.512   Mean   :32.01   Mean   :0.5032  
##  3rd Qu.: 7.000   3rd Qu.:1.000   3rd Qu.:47.00   3rd Qu.:0.8000  
##  Max.   :19.000   Max.   :1.000   Max.   :64.00   Max.   :1.0000  
##    mobile_wt        n_cores            pc           px_height     
##  Min.   : 80.0   Min.   :1.000   Min.   : 0.000   Min.   :   0.0  
##  1st Qu.:109.0   1st Qu.:3.000   1st Qu.: 5.000   1st Qu.: 277.5  
##  Median :140.0   Median :4.000   Median :10.000   Median : 559.0  
##  Mean   :140.3   Mean   :4.523   Mean   : 9.871   Mean   : 644.9  
##  3rd Qu.:171.0   3rd Qu.:7.000   3rd Qu.:15.000   3rd Qu.: 945.2  
##  Max.   :200.0   Max.   :8.000   Max.   :20.000   Max.   :1960.0  
##     px_width         ram            sc_h            sc_w          talk_time    
##  Min.   : 500   Min.   : 256   Min.   : 5.00   Min.   : 0.000   Min.   : 2.00  
##  1st Qu.: 891   1st Qu.:1206   1st Qu.: 9.00   1st Qu.: 2.000   1st Qu.: 6.00  
##  Median :1252   Median :2130   Median :12.00   Median : 5.000   Median :11.00  
##  Mean   :1257   Mean   :2120   Mean   :12.34   Mean   : 5.848   Mean   :11.01  
##  3rd Qu.:1629   3rd Qu.:3054   3rd Qu.:16.00   3rd Qu.: 9.000   3rd Qu.:16.00  
##  Max.   :1998   Max.   :3998   Max.   :19.00   Max.   :18.000   Max.   :20.00  
##     three_g        touch_screen        wifi        price_range  
##  Min.   :0.0000   Min.   :0.000   Min.   :0.000   Min.   :0.00  
##  1st Qu.:1.0000   1st Qu.:0.000   1st Qu.:0.000   1st Qu.:0.75  
##  Median :1.0000   Median :1.000   Median :1.000   Median :1.50  
##  Mean   :0.7513   Mean   :0.504   Mean   :0.502   Mean   :1.50  
##  3rd Qu.:1.0000   3rd Qu.:1.000   3rd Qu.:1.000   3rd Qu.:2.25  
##  Max.   :1.0000   Max.   :1.000   Max.   :1.000   Max.   :3.00
df.train = na.omit(df.train)
df.test = na.omit(df.test)
?cor()
## starting httpd help server ... done
duplicated(df.train)
##    [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [505] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [517] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [529] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [541] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [553] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [565] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [577] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [589] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [601] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [613] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [625] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [637] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [649] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [661] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [673] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [685] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [697] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [709] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [721] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [733] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [745] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [757] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [769] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [781] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [793] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [805] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [817] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [829] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [841] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [853] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [865] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [877] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [889] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [901] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [913] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [925] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [937] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [949] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [961] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [973] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [985] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [997] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1009] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1021] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1033] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1045] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1057] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1069] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1081] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1093] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1105] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1117] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1129] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1141] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1153] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1165] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1177] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1189] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1201] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1213] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1225] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1237] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1249] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1261] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1273] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1285] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1297] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1309] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1321] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1333] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1345] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1357] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1369] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1381] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1393] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1405] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1417] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1429] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1441] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1453] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1465] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1477] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1489] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
duplicated(df.test)
##   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
cor(df.train)
##               battery_power          blue  clock_speed     dual_sim
## battery_power   1.000000000  0.0058128636  0.012724459 -0.060855004
## blue            0.005812864  1.0000000000  0.022849870  0.013441625
## clock_speed     0.012724459  0.0228498698  1.000000000 -0.002543442
## dual_sim       -0.060855004  0.0134416250 -0.002543442  1.000000000
## fc              0.051907161 -0.0157843032  0.001164583 -0.038917951
## four_g          0.020246641  0.0083231371 -0.052274051 -0.010862143
## int_memory     -0.018508488  0.0173988072  0.016930709 -0.009106394
## m_dep           0.046997842 -0.0053690042 -0.019954721 -0.034561918
## mobile_wt       0.015077263  0.0007329897  0.013589704  0.003340436
## n_cores        -0.010479685  0.0340402200  0.011788296 -0.045574982
## pc              0.051823635 -0.0090581235 -0.005624921 -0.025922110
## px_height       0.038665397 -0.0018147049  0.007510915  0.001673050
## px_width        0.002237717 -0.0512234552  0.005755616  0.014608519
## ram             0.044529934  0.0127407084 -0.016083670  0.045556203
## sc_h           -0.036347790  0.0026564577 -0.042456083 -0.018011526
## sc_w           -0.046091386 -0.0074213425 -0.016547750 -0.020909321
## talk_time       0.085940111 -0.0078270054 -0.019759392 -0.052704284
## three_g         0.012589452 -0.0338936373 -0.054264084 -0.018533500
## touch_screen    0.011108680  0.0267765704  0.033323121 -0.008064516
## wifi           -0.003972596 -0.0359501500 -0.041194600  0.003968159
## price_range     0.244210230  0.0083487293 -0.026635733  0.022659547
##                         fc       four_g   int_memory         m_dep
## battery_power  0.051907161  0.020246641 -0.018508488  0.0469978420
## blue          -0.015784303  0.008323137  0.017398807 -0.0053690042
## clock_speed    0.001164583 -0.052274051  0.016930709 -0.0199547207
## dual_sim      -0.038917951 -0.010862143 -0.009106394 -0.0345619176
## fc             1.000000000 -0.023297220 -0.039135585 -0.0155719234
## four_g        -0.023297220  1.000000000  0.030939700 -0.0237129216
## int_memory    -0.039135585  0.030939700  1.000000000  0.0019868695
## m_dep         -0.015571923 -0.023712922  0.001986869  1.0000000000
## mobile_wt      0.034945567 -0.006885952 -0.054533354  0.0338541654
## n_cores       -0.018868774 -0.033575522 -0.011760968 -0.0060052575
## pc             0.644838101 -0.022253837 -0.018853954  0.0045232882
## px_height     -0.000567789 -0.027861707 -0.010939584  0.0304805113
## px_width       0.003584988  0.018147153 -0.021494787  0.0304548166
## ram            0.002200895  0.012422370  0.012092311 -0.0257178303
## sc_h          -0.017294755  0.043220039  0.027754085 -0.0086733022
## sc_w          -0.002052087  0.039879802  0.039539689 -0.0234059842
## talk_time     -0.014234634 -0.053718008 -0.026243800  0.0489040543
## three_g       -0.003435439  0.589274336  0.007618988 -0.0250233829
## touch_screen   0.001405377  0.010478020  0.001107878  0.0008310452
## wifi           0.025396211 -0.033439233  0.013987592 -0.0299205845
## price_range    0.014677668  0.021472438  0.020720670 -0.0102777322
##                   mobile_wt       n_cores           pc     px_height
## battery_power  0.0150772627 -0.0104796848  0.051823635  0.0386653971
## blue           0.0007329897  0.0340402200 -0.009058123 -0.0018147049
## clock_speed    0.0135897038  0.0117882965 -0.005624921  0.0075109153
## dual_sim       0.0033404357 -0.0455749818 -0.025922110  0.0016730500
## fc             0.0349455667 -0.0188687741  0.644838101 -0.0005677890
## four_g        -0.0068859524 -0.0335755215 -0.022253837 -0.0278617071
## int_memory    -0.0545333537 -0.0117609685 -0.018853954 -0.0109395840
## m_dep          0.0338541654 -0.0060052575  0.004523288  0.0304805113
## mobile_wt      1.0000000000 -0.0214035805  0.023380805  0.0002652324
## n_cores       -0.0214035805  1.0000000000  0.001013608  0.0218795379
## pc             0.0233808052  0.0010136080  1.000000000 -0.0109338321
## px_height      0.0002652324  0.0218795379 -0.010933832  1.0000000000
## px_width      -0.0122805694  0.0502923223  0.005225759  0.5006149137
## ram           -0.0266099759  0.0062240297  0.029211844 -0.0302886768
## sc_h          -0.0416953445  0.0076881411  0.004334808  0.0674024873
## sc_w          -0.0274207144  0.0256711058  0.001125625  0.0453188541
## talk_time      0.0128170068 -0.0008113497  0.001679403  0.0057134984
## three_g        0.0094794809 -0.0119303355 -0.005906302 -0.0387310171
## touch_screen  -0.0195516397  0.0442536319 -0.017927491  0.0275418770
## wifi           0.0039009721 -0.0081539243  0.013964933  0.0435481692
## price_range   -0.0527440857  0.0146430838  0.037986375  0.1448396189
##                   px_width          ram         sc_h         sc_w     talk_time
## battery_power  0.002237717  0.044529934 -0.036347790 -0.046091386  0.0859401113
## blue          -0.051223455  0.012740708  0.002656458 -0.007421343 -0.0078270054
## clock_speed    0.005755616 -0.016083670 -0.042456083 -0.016547750 -0.0197593923
## dual_sim       0.014608519  0.045556203 -0.018011526 -0.020909321 -0.0527042843
## fc             0.003584988  0.002200895 -0.017294755 -0.002052087 -0.0142346341
## four_g         0.018147153  0.012422370  0.043220039  0.039879802 -0.0537180084
## int_memory    -0.021494787  0.012092311  0.027754085  0.039539689 -0.0262438000
## m_dep          0.030454817 -0.025717830 -0.008673302 -0.023405984  0.0489040543
## mobile_wt     -0.012280569 -0.026609976 -0.041695345 -0.027420714  0.0128170068
## n_cores        0.050292322  0.006224030  0.007688141  0.025671106 -0.0008113497
## pc             0.005225759  0.029211844  0.004334808  0.001125625  0.0016794030
## px_height      0.500614914 -0.030288677  0.067402487  0.045318854  0.0057134984
## px_width       1.000000000 -0.029427601  0.014906615  0.041662557  0.0156125554
## ram           -0.029427601  1.000000000  0.012124393  0.036207946  0.0082564634
## sc_h           0.014906615  0.012124393  1.000000000  0.503374067 -0.0203523354
## sc_w           0.041662557  0.036207946  0.503374067  1.000000000 -0.0241004962
## talk_time      0.015612555  0.008256463 -0.020352335 -0.024100496  1.0000000000
## three_g        0.025266308  0.031041851  0.027871752  0.030913535 -0.0293463406
## touch_screen  -0.014311600 -0.045495769 -0.004751042  0.036593732  0.0012156494
## wifi           0.035718023  0.031860975  0.020514108  0.032520525 -0.0350520174
## price_range    0.136994076  0.915949011  0.021320046  0.034512672  0.0263050427
##                    three_g  touch_screen         wifi  price_range
## battery_power  0.012589452  0.0111086804 -0.003972596  0.244210230
## blue          -0.033893637  0.0267765704 -0.035950150  0.008348729
## clock_speed   -0.054264084  0.0333231211 -0.041194600 -0.026635733
## dual_sim      -0.018533500 -0.0080645161  0.003968159  0.022659547
## fc            -0.003435439  0.0014053774  0.025396211  0.014677668
## four_g         0.589274336  0.0104780200 -0.033439233  0.021472438
## int_memory     0.007618988  0.0011078785  0.013987592  0.020720670
## m_dep         -0.025023383  0.0008310452 -0.029920584 -0.010277732
## mobile_wt      0.009479481 -0.0195516397  0.003900972 -0.052744086
## n_cores       -0.011930335  0.0442536319 -0.008153924  0.014643084
## pc            -0.005906302 -0.0179274907  0.013964933  0.037986375
## px_height     -0.038731017  0.0275418770  0.043548169  0.144839619
## px_width       0.025266308 -0.0143115999  0.035718023  0.136994076
## ram            0.031041851 -0.0454957687  0.031860975  0.915949011
## sc_h           0.027871752 -0.0047510421  0.020514108  0.021320046
## sc_w           0.030913535  0.0365937322  0.032520525  0.034512672
## talk_time     -0.029346341  0.0012156494 -0.035052017  0.026305043
## three_g        1.000000000  0.0215689468 -0.014664804  0.037936854
## touch_screen   0.021568947  1.0000000000  0.003968159 -0.039356056
## wifi          -0.014664804  0.0039681587  1.000000000  0.029218189
## price_range    0.037936854 -0.0393560558  0.029218189  1.000000000
corrplot(cor(df.train), type='upper', order='hclust', col=brewer.pal(n=8, name="RdYlBu"))

corrplot(cor(df.train), method = "number",
           type = "upper",
           tl.cex = 0.8,
           tl.srt = 40,
           tl.col = "red")

Từ hình dung ma trận tương quan này, thấy rằng 2 đặc điểm có tương quan cao nhất là: “price_range” và “ram”

Liên quan đến price_range (biến dùng dự đoán), ta cũng có thể thấy rằng “pin_power” và “px_height” đều có tương quan nhẹ với “price_range”

ggplot(data = df.train, mapping=aes(x=ram, y=price_range)) +
    geom_smooth(se=FALSE, color='darkgreen', method='gam', formula = y ~ s(x, bs = "cs")) + 
    ggtitle('Ram v. Price Range: +90% correlation') +
    theme(plot.title = element_text(face="bold")) + 
    labs(x = 'Ram', y='Price Range')

ggplot(data = df.train, mapping=aes(x=battery_power, y=price_range)) +
    geom_smooth(se=FALSE, color='darkblue', method='gam', formula = y ~ s(x, bs = "cs")) +
    ggtitle('Battery Power v. Price Range: +20% correlation') +
    theme(plot.title = element_text(face="bold")) +
    labs(x = 'Battery Power', y='Price Range')

ggplot(data = df.train, mapping=aes(x=px_height, y=price_range)) +
    geom_smooth(se=FALSE, color='red', method='gam', formula = y ~ s(x, bs = "cs")) +
    ggtitle('Pixel Height v. Price Range: ~15% correlation') +
    theme(plot.title = element_text(face="bold")) +
    labs(x = 'Pixel Height', y='Price Range')

  1. Machine Learning¶ 2.1. Decision tree:
set.seed(1)
#Xây dựng mô hình cây quyết định
library(rpart)
library(rpart.plot)
fit <- rpart(price_range~., data = df.train, method = 'class')
fit
## n= 1500 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 1500 1125 0 (0.25000000 0.25000000 0.25000000 0.25000000)  
##    2) ram< 2245 790  415 0 (0.47468354 0.41645570 0.10886076 0.00000000)  
##      4) ram< 1056 319   32 0 (0.89968652 0.10031348 0.00000000 0.00000000) *
##      5) ram>=1056 471  174 1 (0.18683652 0.63057325 0.18259023 0.00000000)  
##       10) ram< 1473.5 192   81 1 (0.39062500 0.57812500 0.03125000 0.00000000)  
##         20) battery_power< 1063.5 72   11 0 (0.84722222 0.15277778 0.00000000 0.00000000) *
##         21) battery_power>=1063.5 120   20 1 (0.11666667 0.83333333 0.05000000 0.00000000) *
##       11) ram>=1473.5 279   93 1 (0.04659498 0.66666667 0.28673835 0.00000000)  
##         22) battery_power< 1462.5 181   31 1 (0.07182320 0.82872928 0.09944751 0.00000000) *
##         23) battery_power>=1462.5 98   36 2 (0.00000000 0.36734694 0.63265306 0.00000000)  
##           46) px_width< 960 21    3 1 (0.00000000 0.85714286 0.14285714 0.00000000) *
##           47) px_width>=960 77   18 2 (0.00000000 0.23376623 0.76623377 0.00000000) *
##    3) ram>=2245 710  335 3 (0.00000000 0.06478873 0.40704225 0.52816901)  
##      6) ram< 3013.5 323   93 2 (0.00000000 0.14241486 0.71207430 0.14551084) *
##      7) ram>=3013.5 387   59 3 (0.00000000 0.00000000 0.15245478 0.84754522) *
#vẽ cây quyết định dựa trên mô hình đã xây dựng
rpart.plot(fit, extra = 106)
## Warning: extra=106 but the response has 4 levels (only the 2nd level is
## displayed)

#Dự đoán dựa trên tập test
predict_unseen <-predict(fit, df.test, type = 'class')
# Tạo một bảng để đếm số lượng giá được phân loại
table_mat <- table(df.test$price_range, predict_unseen)
table_mat
##    predict_unseen
##       0   1   2   3
##   0 116   9   0   0
##   1  13  89  23   0
##   2   0  12  84  29
##   3   0   0  21 104
#Tính độ chính xác của mô hình bằng confusion matrix:
accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)
print(paste('Accuracy for test', accuracy_Test))
## [1] "Accuracy for test 0.786"

2.2. KNN: K-Nearest Neighbors

library(tidyverse) 
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.1.3
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(caret)
## Warning: package 'caret' was built under R version 4.1.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift
# hyperparameter and model adjustment by Cross Validation method
ctrl <- trainControl(method = "cv", number = 10)

set.seed(1)
knn <- train(
  price_range ~ ram + battery_power + px_height,
  data = df.train,
  method = 'knn',
  trControl = ctrl,
  tuneGrid = expand.grid(k = seq(1, 15, by = 1))
)
knn
## k-Nearest Neighbors 
## 
## 1500 samples
##    3 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 1351, 1349, 1351, 1350, 1348, 1350, ... 
## Resampling results across tuning parameters:
## 
##   k   RMSE       Rsquared   MAE      
##    1  0.3856904  0.8853372  0.1500329
##    2  0.3344518  0.9111760  0.1520132
##    3  0.3065025  0.9247720  0.1491322
##    4  0.2971054  0.9290728  0.1503508
##    5  0.2979558  0.9285443  0.1582928
##    6  0.2908917  0.9320410  0.1592636
##    7  0.2899348  0.9326489  0.1637374
##    8  0.2863729  0.9342395  0.1650949
##    9  0.2836206  0.9355266  0.1666976
##   10  0.2827430  0.9359385  0.1694957
##   11  0.2812535  0.9366894  0.1709525
##   12  0.2817168  0.9365325  0.1736473
##   13  0.2820504  0.9363845  0.1753627
##   14  0.2808375  0.9369629  0.1761283
##   15  0.2813538  0.9366697  0.1776936
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 14.
df.test$predictions <-  predict(knn, df.test)
data.frame(
  RMSE = RMSE(df.test$predictions, df.test$price_range),
  MSE = RMSE(df.test$predictions, df.test$price_range)**2,
  Rsquare = R2(df.test$predictions, df.test$price_range)
)
##        RMSE        MSE   Rsquare
## 1 0.2765494 0.07647959 0.9391479
df.train$predictions <-  predict(knn, df.train)
data.frame(
  RMSE = RMSE(df.train$predictions, df.train$price_range),
  MSE = RMSE(df.train$predictions, df.train$price_range)**2,
  Rsquare = R2(df.train$predictions, df.train$price_range)
)
##        RMSE        MSE   Rsquare
## 1 0.2603957 0.06780594 0.9459179

2.3. SVM: Support Vector Machine Tiếp theo, sử dụng Support Vector Machine. Đối với các biến x ,sẽ sử dụng 3 giá trị có tương quan cao nhất với phạm vi giá đó là: ram, năng lượng pin và chiều cao px.

set.seed(1)
?svm()
svm <- svm(price_range~ram+battery_power+px_height, data=df.train, cost=10)

# Root Mean Squared Error (SVM)
predict_svm_train <- predict(svm, df.train)
sqrt(mean(df.train$price_range - predict_svm_train)^2)
## [1] 0.0001143881
?predict()
predict_svm_test <- predict(svm, df.test)  
sqrt(mean(df.test$price_range - predict_svm_test)^2)
## [1] 0.0005337868
# Mean Squared Error (SVM)
predict_svm_train_2 <- predict(svm, df.train)
mean(df.train$price_range - predict_svm_train_2)^2
## [1] 1.308463e-08
predict_svm_test_2 <- predict(svm, df.test)  
mean(df.test$price_range - predict_svm_test_2)^2
## [1] 2.849284e-07

Đầu tiên, thấy rằng sai số của Nhóm là trong phạm vi phần nghìn (cực kỳ nhỏ).Nhóm đang phân loại điện thoại di động thành các khoảng giá sau: 0, 1, 2 và 3. Do đó,Nhóm có thể kết luận rằng lỗi của mô hình là cực kỳ nhỏ và mô hình hoạt động rất tốt.

2.4. Linear Regression Bây giờ,Nhóm sẽ thử tiếp với Linear Regression để thử và dự đoán phạm vi giá. Đầu tiên, nhóm sẽ chỉ sử dụng biến tương quan nhất với phạm vi giá là ram

set.seed(1)
lr.fit = lm(price_range~ram, data=df.train)
summary(lr.fit)
## 
## Call:
## lm(formula = price_range ~ ram, data = df.train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.36251 -0.26183 -0.00131  0.26235  1.37977 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.946e-01  2.538e-02  -19.49   <2e-16 ***
## ram          9.408e-04  1.065e-05   88.34   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.449 on 1498 degrees of freedom
## Multiple R-squared:  0.839,  Adjusted R-squared:  0.8389 
## F-statistic:  7804 on 1 and 1498 DF,  p-value: < 2.2e-16

Kết quả của Nhóm từ mô hình Linear Regression là khá tốt - biến có ý nghĩa thống kê (như mong đợi), ngoài ra, giá trị R-squared là 0,84 (84%)

Việc thêm pin_power (biến tương quan thứ hai với phạm vi giá) vào có cải thiện mô hình của không?

set.seed(1)

lr.fit2 = lm(price_range~ram+battery_power, data=df.train)
summary(lr.fit2)
## 
## Call:
## lm(formula = price_range ~ ram + battery_power, data = df.train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.06301 -0.27373 -0.00769  0.25298  1.23932 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.123e+00  3.519e-02  -31.90   <2e-16 ***
## ram            9.315e-04  9.189e-06  101.37   <2e-16 ***
## battery_power  5.221e-04  2.292e-05   22.78   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.387 on 1497 degrees of freedom
## Multiple R-squared:  0.8804, Adjusted R-squared:  0.8803 
## F-statistic:  5511 on 2 and 1497 DF,  p-value: < 2.2e-16

nó cải thiện mô hình của nhóm! nhóm có thể cải thiện mô hình của mình hơn nữa bằng cách thêm biến tương quan thứ ba vào phạm vi giá (px_height) không?

set.seed(1)
lr.fit3 = lm(price_range~ram+battery_power+px_height, data=df.train)
summary(lr.fit3)
## 
## Call:
## lm(formula = price_range ~ ram + battery_power + px_height, data = df.train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.95493 -0.26635 -0.00035  0.24580  0.86975 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.379e+00  3.329e-02  -41.43   <2e-16 ***
## ram            9.369e-04  8.087e-06  115.85   <2e-16 ***
## battery_power  5.052e-04  2.018e-05   25.04   <2e-16 ***
## px_height      4.129e-04  1.972e-05   20.94   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3404 on 1496 degrees of freedom
## Multiple R-squared:  0.9075, Adjusted R-squared:  0.9073 
## F-statistic:  4894 on 3 and 1496 DF,  p-value: < 2.2e-16

Nhóm nhận được giá trị R-squared là 0,91, tỷ lệ này là 91% (trên 100). Kết quả này rất tốt và nó có nghĩa là Mô hình Linear Regression của nhóm đã hoạt động rất tốt.

Bây giờ, nhóm sẽ tính toán RMSE và MSE cho Mô hình Linear Regression.

# Root Mean Squared Error (LR)
predict_lr.fit3_train <- predict(lr.fit3, df.train)
sqrt(mean(df.train$price_range - predict_lr.fit3_train)^2)
## [1] 7.607031e-15
predict_lr.fit3_test <- predict(lr.fit3, df.test)  
sqrt(mean(df.test$price_range - predict_lr.fit3_test)^2)
## [1] 0.01167822
# Mean Squared Error (LR)
predict_lr.fit3_train_2 <- predict(lr.fit3, df.train)
mean(df.train$price_range - predict_lr.fit3_train_2)^2
## [1] 5.786692e-29
predict_lr.fit3_test_2 <- predict(lr.fit3, df.test)  
mean(df.test$price_range - predict_lr.fit3_test_2)^2
## [1] 0.0001363807

Từ kết quả RMSE và MSE của Nhóm, thấy rằng Mô hình Linear Regression của Nhóm hoạt động rất tốt, tương tự như Mô hình SVM của Nhóm.

nhóm đang sử dụng mô hình hồi quy cho một bài toán phân loại. Tại sao điều này hoạt động? Vì biến y của chúng ta sẽ là 0, 1, 2 hoặc 3 nên mô hình của nhóm coi nó như thể nó là hồi quy và chạy. Hơn nữa, nó hoạt động tốt vì nó đánh giá 4 danh mục nhóm (ở trên) dưới dạng các biến định lượng (không phải định tính) và sử dụng Linear Regression để tìm khoảng giá tối ưu cho mỗi quan sát, sau đó được phân loại thành 0, 1, 2 hoặc 3.

hình ảnh 3D bao gồm ram, battery power, pixel height, được tô màu theo dự đoán của Linear Regression về giá là 0, 1, 2 hoặc 3.

fig <- plot_ly(
    df.train,
    x=~df.train$ram,
    y=~df.train$battery_power,
    z=~df.train$px_height,
    color=predict_lr.fit3_train,
    type='scatter3d',
    mode='markers')

fig <- fig %>% layout(
title='Ram x Battery Power x Pixel Height',
    scene=list(
    xaxis=list(title='Ram'),
    yaxis=list(title='Battery Power'),
    zaxis=list(title='Pixel Height')
    ))
fig

Từ mô hình 3D, Nhóm có thể thấy một cách trực quan từng biến số đóng góp vào giá của một chiếc Điện thoại di động như thế nào.

*Tổng Kết: Mô hình nào tốt hơn: Decision tree, SVM , Linear Regression, KNN? Từ kết quả, Nhóm thấy rằng các giá trị của Mô hình Linear Regression cho RMSE và MSE tương ứng nhỏ hơn các giá trị RMSE và MSE cho Mô hình SVM và KNN, Decision tree

Vì vậy, Mô hình Linear Regression hoạt động tốt hơn mô hình SVM ,KNN

Giải quyết câu hỏi trọng tâm của Nhóm: Tính năng nào quan trọng nhất trong việc dự đoán Giá điện thoại di động? Đầu tiên, nhìn vào ma trận tương quan, Nhóm thấy rằng ram là biến có tương quan nhất với phạm vi giá, năng lượng pin là biến có tương quan nhiều thứ hai với phạm vi giá và chiều cao px là biến tương quan thứ ba với phạm vi giá.

Bây giờ, nhìn vào phần tóm tắt của Mô hình Linear Regression, thấy rằng cả 3 biến (ram, battery power, pixel height) đều có t-values rất cao, nghĩa là chúng đều rất quan trọng trong việc dự đoán biến y của nhóm. Cụ thể, ram có t-values cao nhất, battery power có t-values cao thứ hai và pixel height có t-values cao thứ ba. “Thứ tự của tầm quan trọng thay đổi” này trực tiếp tương ứng với những phát hiện của nhóm từ ma trận tương quan của chúng tôi ở trên!

Tóm lại, các tính năng quan trọng nhất trong việc dự đoán giá của một chiếc Điện thoại di động là ram, battery power, pixel height.